/**
 * 
 */
package actions;

import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

import persistence.Dictionnaire;
import persistence.Enseignant;
import persistence.Message;
import persistence.Mot;
import persistence.Session;
import persistence.Utilisateur;
import persistence.rmi.IntegrationRemote;
import servlet.CentralServlet;

/**
 * @author Administrateur
 *
 */
public class actionGerer extends Action{

	public actionGerer(Object b) {
		super(b);
		// TODO Auto-generated constructor stub
	}
	public Message call() throws Exception {
		Message mout = null;
		Message m = this.getMsgIn();
		try {
			if( m.getType().equals("Dictionnaire")){
				mout = getDictionnaires();
			}
			if (m.getType().equals("Langue")){
				mout = getLangues();
			}
			if (m.getType().equals("creation")){
				mout = createDictionnaires(((Dictionnaire)m.getObjet()),((Enseignant)m.getObjet()));
			}
			if (m.getType().equals("Update")){
				mout = updateDictionnaires(((Dictionnaire)m.getObjet()),((Enseignant)m.getObjet()));

			}
			if (m.getType().equals("Delete")){
				mout = deleteDictionnaires(((Dictionnaire)m.getObjet()),((Enseignant)m.getObjet()));

			}
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (Throwable e) {
			e.printStackTrace();
		}
		return mout;
	}
	

	public Message getDictionnaires() throws RemoteException{
		Message resultat = new Message();
		int port = Integer.parseInt(CentralServlet.getProps().getProperty("port.rmi"));
		try {
			Registry annuaire = LocateRegistry.getRegistry(port);
			IntegrationRemote remote = (IntegrationRemote) annuaire.lookup(CentralServlet.getProps().getProperty("url.service"));
			resultat.setObjet(remote.getAllDictionnaires());
			Utilisateur us = (Utilisateur) resultat.getObjet();
			System.out.println("#Messgae transmitted:#"+us.getType());
			System.out.println("resultat appel IntegrationRemote checkConnexionInfos"+ us.getType());
		} catch (NotBoundException e) {
			e.printStackTrace();
		} 
		return resultat;
	}
	
	public Message getLangues() throws RemoteException{
		Message resultat = new Message();
		int port = Integer.parseInt(CentralServlet.getProps().getProperty("port.rmi"));
		try {
			Registry annuaire = LocateRegistry.getRegistry(port);
			IntegrationRemote remote = (IntegrationRemote) annuaire.lookup(CentralServlet.getProps().getProperty("url.service"));
			resultat.setObjet(remote.getLangues());
			Utilisateur us = (Utilisateur) resultat.getObjet();
			System.out.println("#Messgae transmitted:#"+us.getType());
			System.out.println("resultat appel IntegrationRemote checkConnexionInfos"+ us.getType());
		} catch (NotBoundException e) {
			e.printStackTrace();
		} 
		return resultat;
	}
	
	private Message createDictionnaires(Dictionnaire d,Enseignant e) {
		Message resultat = new Message();
		int port = Integer.parseInt(CentralServlet.getProps().getProperty("port.rmi"));
		try {
			Registry annuaire = LocateRegistry.getRegistry(port);
			IntegrationRemote remote = (IntegrationRemote) annuaire.lookup(CentralServlet.getProps().getProperty("url.service"));
			resultat.setObjet(remote.createDictionnaire(d,e));
			Utilisateur us = (Utilisateur) resultat.getObjet();
			System.out.println("#Messgae transmitted:#"+us.getType());
			System.out.println("resultat appel IntegrationRemote checkConnexionInfos"+ us.getType());
		} catch (NotBoundException e) {
			e.printStackTrace();
		} 
		return resultat;
	}
	
	private Message updateDictionnaires(Dictionnaire d,Enseignant e) {
		Message resultat = new Message();
		int port = Integer.parseInt(CentralServlet.getProps().getProperty("port.rmi"));
		try {
			Registry annuaire = LocateRegistry.getRegistry(port);
			IntegrationRemote remote = (IntegrationRemote) annuaire.lookup(CentralServlet.getProps().getProperty("url.service"));
			resultat.setObjet(remote.updateDictionnaire(d,e));
			Utilisateur us = (Utilisateur) resultat.getObjet();
			System.out.println("#Messgae transmitted:#"+us.getType());
			System.out.println("resultat appel IntegrationRemote checkConnexionInfos"+ us.getType());
		} catch (NotBoundException e) {
			e.printStackTrace();
		} 
		return resultat;
	}
	
	private Message deleteDictionnaires(Dictionnaire d,Enseignant e) {
		Message resultat = new Message();
		int port = Integer.parseInt(CentralServlet.getProps().getProperty("port.rmi"));
		try {
			Registry annuaire = LocateRegistry.getRegistry(port);
			IntegrationRemote remote = (IntegrationRemote) annuaire.lookup(CentralServlet.getProps().getProperty("url.service"));
			resultat.setObjet(remote.deleteDictionnaire(d,e));
			Utilisateur us = (Utilisateur) resultat.getObjet();
			System.out.println("#Messgae transmitted:#"+us.getType());
			System.out.println("resultat appel IntegrationRemote checkConnexionInfos"+ us.getType());
		} catch (NotBoundException e) {
			e.printStackTrace();
		} 
		return resultat;
	}

}
